package com.qjc.demo.thread.join;

/**
 * @Description:
 * @Author: qjc
 * @Date: 2020/7/17
 */
public class JoinTest {

    /**
     * join使用场景：需要等待某几件事情完成后才能继续往下执行，
     * 比如多个线程加载资源，需要等待多个线程全部加载完毕再汇总处理。
     * 同样功能的还有CountDownLatch，它的使用比join更加灵活
     */
    public static void main(String[] args) {
        Thread threadA = new Thread(() -> System.out.println("AAAAA"));
        Thread threadB = new Thread(() -> {
            try {
                threadA.join();//threadB被threadA阻塞，只有等threadA执行完毕后，threadB才能继续执行
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("BBBBB");
        });
        Thread threadC = new Thread(() -> {
            try {
                threadB.join();//threadC被threadB阻塞，只有等threadB执行完毕后，threadC才能继续执行
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("CCCCC");
        });

        threadC.start();
        threadA.start();
        threadB.start();

    }

}
